package com.jilian.mydemo.api;


import com.jilian.mydemo.base.BaseDto;
import com.jilian.mydemo.base.BaseVo;
import com.jilian.mydemo.city.bean.ProvinceBean;
import com.jilian.mydemo.common.dto.AccountDto;
import com.jilian.mydemo.common.dto.BannerListDto;
import com.jilian.mydemo.common.dto.CommitOrderDto;
import com.jilian.mydemo.common.dto.CommiteDto;
import com.jilian.mydemo.common.dto.EvaluateDto;
import com.jilian.mydemo.common.dto.FinishImgDto;
import com.jilian.mydemo.common.dto.FinishPayDto;
import com.jilian.mydemo.common.dto.GoodsTypeDto;
import com.jilian.mydemo.common.dto.LeaveStatusDto;
import com.jilian.mydemo.common.dto.LoginDto;
import com.jilian.mydemo.common.dto.MemberDto;
import com.jilian.mydemo.common.dto.MsgListDto;
import com.jilian.mydemo.common.dto.MyInfoDto;
import com.jilian.mydemo.common.dto.OrderDetailDto;
import com.jilian.mydemo.common.dto.OrderDto;
import com.jilian.mydemo.common.dto.OrderListDto;
import com.jilian.mydemo.common.dto.ParamsListDto;
import com.jilian.mydemo.common.dto.PartnerDescriptionDto;
import com.jilian.mydemo.common.dto.PerformListDto;
import com.jilian.mydemo.common.dto.PlanPathListDto;
import com.jilian.mydemo.common.dto.ProductDetailDto;
import com.jilian.mydemo.common.dto.ProductListDto;
import com.jilian.mydemo.common.dto.QuestionDto;
import com.jilian.mydemo.common.dto.ServiceProcessDto;
import com.jilian.mydemo.common.dto.ShopListDto;
import com.jilian.mydemo.common.dto.StudyListDto;
import com.jilian.mydemo.common.dto.VideoArticlesDto;
import com.jilian.mydemo.common.dto.VideoArticlesListDto;
import com.jilian.mydemo.common.dto.WrongAnwserDto;
import com.jilian.mydemo.common.vo.AddProductToOrderVo;
import com.jilian.mydemo.common.vo.AppNoticeVo;
import com.jilian.mydemo.common.vo.AppUserInfoVO;
import com.jilian.mydemo.common.vo.ArticleDetailVo;
import com.jilian.mydemo.common.vo.BannerVo;
import com.jilian.mydemo.common.vo.BrowseArticleVO;
import com.jilian.mydemo.common.vo.ComminteListVo;
import com.jilian.mydemo.common.vo.DelayNoticeVo;
import com.jilian.mydemo.common.vo.FinishImgVo;
import com.jilian.mydemo.common.vo.FinishOrderVo;
import com.jilian.mydemo.common.vo.GoodDetailVo;
import com.jilian.mydemo.common.vo.LeaveVo;
import com.jilian.mydemo.common.vo.LoginVo;
import com.jilian.mydemo.common.vo.MemberVo;
import com.jilian.mydemo.common.vo.OrderVo;
import com.jilian.mydemo.common.vo.PerformanceVo;
import com.jilian.mydemo.common.vo.ProductListVo;
import com.jilian.mydemo.common.vo.ProductToShoppingCartVo;
import com.jilian.mydemo.common.vo.ReportOrderVo;
import com.jilian.mydemo.common.vo.SendSmsVo;
import com.jilian.mydemo.common.vo.ServiceAreaVo;
import com.jilian.mydemo.common.vo.SubscribeVo;
import com.jilian.mydemo.common.vo.UpdatePasswordVo;
import com.jilian.mydemo.common.vo.UpdateShopCartVo;
import com.jilian.mydemo.common.vo.UpdateWorkVo;
import com.jilian.mydemo.common.vo.UserRegistVo;
import com.jilian.mydemo.common.vo.WithdrawCountVo;
import com.jilian.mydemo.common.vo.WithdrawOrderVo;
import com.jilian.mydemo.common.vo.WithdrawVo;

import java.util.List;

import io.reactivex.Flowable;
import okhttp3.MultipartBody;
import retrofit2.http.Body;
import retrofit2.http.GET;
import retrofit2.http.POST;

/**
 * api接口
 *
 * @author weishixiong
 * @Time 2018-04-2
 */

public interface ApiService {
    /**
     * 登录
     * post
     * 表单提交
     *
     * @param vo
     * @return
     */
    @POST("/app/login")
    Flowable<BaseDto<LoginDto>> login(@Body LoginVo vo);

    /**
     * 获取验证码
     *
     * @param vo
     * @return
     */
    @POST("/app/sendSms")
    Flowable<BaseDto> sendSms(@Body SendSmsVo vo);


    /**
     * 注册
     *
     * @param vo
     * @return
     */
    @POST("/app/regist")
    Flowable<BaseDto> regist(@Body UserRegistVo vo);

    /**
     * 实名认证卡口，根据返回状态进行跳转
     *
     * @param
     * @return
     */
    @POST("/app/check")
    Flowable<BaseDto<Integer>> check();

    /**
     * 个人中心 个人信息接口
     *
     * @param
     * @return
     */
    @POST("/app/usercenter/info")
    Flowable<BaseDto<MyInfoDto>> info();


    /**
     * 修改密码
     *
     * @param
     * @return
     */
    @POST("/app/usercenter/updateUserPassword")
    Flowable<BaseDto> updateUserPassword(@Body AppUserInfoVO vo);

    /**
     * 修改手机号
     *
     * @param
     * @return
     */
    @POST("/app/usercenter/updateUserPhone")
    Flowable<BaseDto> updateUserPhone(@Body AppUserInfoVO vo);


    /**
     * 消息查询接口列表
     *
     * @param
     * @return
     */
    @POST("/app/notice/query")
    Flowable<BaseDto<MsgListDto>> query(@Body AppNoticeVo vo);

    /**
     * 消息读接口
     *
     * @param
     * @return
     */
    @POST("/app/notice/read")
    Flowable<BaseDto> read(@Body AppNoticeVo vo);


    /**
     * 修改用户信息
     *
     * @param multipartBody
     * @return
     */
    @POST("/app/usercenter/updateUserInfo")
    Flowable<BaseDto> updateUserInfo(@Body MultipartBody multipartBody);


    /**
     * 我的收藏
     *
     * @param
     * @return
     */
    @POST("/app/usercenter/queryCollect")
    Flowable<BaseDto<VideoArticlesListDto>> queryCollect(@Body BaseVo vo);


    /**
     * 水工课堂列表
     *
     * @param
     * @return
     */
    @POST("/app/article/queryArticle")
    Flowable<BaseDto<VideoArticlesListDto>> queryArticle(@Body BaseVo vo);

    /**
     * 文章详情
     *
     * @param vo
     * @return
     */
    @POST("/app/article/queryAppArticleDetail")
    Flowable<BaseDto<VideoArticlesDto>> queryAppArticleDetail(@Body ArticleDetailVo vo);


    /**
     * 配件商城
     *
     * @param
     * @return
     */
    @POST("/app/product/getAppProductList")
    Flowable<BaseDto<ProductListDto>> getAppProductList(@Body ProductListVo vo);

    /**
     * 获取商品类别
     *
     * @return
     */
    @POST("app/product/queryProductTypes")
    Flowable<BaseDto<List<GoodsTypeDto>>> queryProductTypes();


    /**
     * 收藏
     *
     * @param
     * @return
     */
    @POST("/app/article/addCollect")
    Flowable<BaseDto> addCollect(@Body BrowseArticleVO vo);


    /**
     * 获取商品详情
     *
     * @param
     * @return
     */
    @POST("/app/product/getAppProductDetail")
    Flowable<BaseDto<ProductDetailDto>> getAppProductDetail(@Body GoodDetailVo vo);


    /**
     * 学习手册
     *
     * @param
     * @return
     */
    @POST("/app/question/study")
    Flowable<BaseDto<StudyListDto>> study();


    /**
     * 随机20道题
     *
     * @param
     * @return
     */
    @GET("/app/question/random")
    Flowable<BaseDto<List<QuestionDto>>> random();


    /**
     * 提交答题结果
     *
     * @param vo
     * @return
     */
    @POST("/app/question/submit")
    Flowable<BaseDto<CommiteDto>> submit(@Body ComminteListVo vo);


    /**
     * @param multipartBody
     * @return
     */
    @POST("/app/photoVerify")
    Flowable<BaseDto> photoVerify(@Body MultipartBody multipartBody);


    @GET("/app/question/wrong")
    Flowable<BaseDto<List<WrongAnwserDto>>> wrong();


    /**
     * 重置密码
     *
     * @param vo
     * @return
     */
    @POST("/app/updatePassword")
    Flowable<BaseDto> updatePassword(@Body UpdatePasswordVo vo);


    /**
     * 获取百万合作说明
     *
     * @return
     */
    @POST("/app/partner/getPartnerDescription")
    Flowable<BaseDto<PartnerDescriptionDto>> getPartnerDescription();


    /**
     * @param multipartBody
     * @return
     */
    @POST("/app/partner/partnerApply")
    Flowable<BaseDto> partnerApply(@Body MultipartBody multipartBody);


    /**
     * 获取合伙人申请状态
     *
     * @return
     */
    @POST("/app/partner/getPartnerApply")
    Flowable<BaseDto<PartnerDescriptionDto>> getPartnerApply();


    /**
     * 点击去接单掉该接口
     *
     * @return
     */
    @POST("/app/clicked")
    Flowable<BaseDto> clicked();

    /**
     * 获取请假状态
     *
     * @return
     */
    @POST("/app/partner/getLeaveStatus")
    Flowable<BaseDto<LeaveStatusDto>> getLeaveStatus();

    /**
     * 取消接单 请假
     *
     * @return
     */
    @POST("/app/partner/leave")
    Flowable<BaseDto> leave(@Body LeaveVo vo);

    /**
     * 接单
     *
     * @return
     */
    @POST("/app/partner/takeOrder")
    Flowable<BaseDto> takeOrder();


    /**
     * 获取广告列表
     *
     * @return
     */
    @POST("/common/getAppAdList")
    Flowable<BaseDto<BannerListDto>> getAppAdList(@Body BannerVo vo);


    /**
     * 订单列表
     *
     * @return
     */
    @POST("/app/order/query")
    Flowable<BaseDto<OrderListDto>> query(@Body OrderVo vo);

    /**
     * 抢单
     *
     * @return
     */
    @POST("/app/order/grabOrder")
    Flowable<BaseDto> grabOrder(@Body OrderVo vo);

    /**
     * 填写预约信息
     *
     * @return
     */
    @POST("/app/order/subscribe")
    Flowable<BaseDto> subscribe(@Body SubscribeVo vo);

    /**
     * 延时提醒
     *
     * @param vo
     * @return
     */
    @POST("/app/order/delayNotice")
    Flowable<BaseDto> delayNotice(@Body DelayNoticeVo vo);

    /**
     * 查看服务进程
     *
     * @param vo
     * @return
     */
    @POST("/app/order/serviceProcess")
    Flowable<BaseDto<List<ServiceProcessDto>>> serviceProcess(@Body OrderVo vo);


    /**
     * 上门签到
     *
     * @param multipartBody
     * @return
     */
    @POST("/app/order/visitSign")
    Flowable<BaseDto> visitSign(@Body MultipartBody multipartBody);


    /**
     * 水工报单
     *
     * @param multipartBody
     * @return
     */
    @POST("/app/order/reportOrder")
    Flowable<BaseDto> reportOrder(@Body MultipartBody multipartBody);


    /**
     * 退单
     *
     * @param vo
     * @return
     */
    @POST("/app/order/withdrawOrder")
    Flowable<BaseDto> withdrawOrder(@Body WithdrawOrderVo vo);

    /**
     * 退单次数
     *
     * @param
     * @return
     */
    @POST("/app/order/withdrawCount")
    Flowable<BaseDto<String>> withdrawCount(@Body WithdrawCountVo vo);

    /**
     * 订单详情
     *
     * @param vo
     * @return
     */
    @POST("/app/order/queryDetail")
    Flowable<BaseDto<OrderDetailDto>> queryDetail(@Body OrderVo vo);

    /**
     * 水工绩效
     *
     * @param vo
     * @return
     */
    @POST("/app/usercenter/performance")
    Flowable<BaseDto<PerformListDto>> performance(@Body PerformanceVo vo);

    /**
     * 水工评分
     *
     * @param
     * @return
     */
    @POST("/app/usercenter/evaluate")
    Flowable<BaseDto<EvaluateDto>> evaluate();

    /**
     * 多人水工
     *
     * @return
     */
    @POST("/app/order/queryMember")
    Flowable<BaseDto<List<MemberDto>>> queryMember(@Body MemberVo vo);

    /**
     * 设置水工工作量
     *
     * @return
     */
    @POST("/app/order/updateWork")
    Flowable<BaseDto> updateWork(@Body UpdateWorkVo vo);

    /**
     * 工单地图
     *
     * @return
     */
    @POST("/app/order/planPath")
    Flowable<BaseDto<PlanPathListDto>> planPath();

    /**
     * 上传凭据（表单提交）
     *
     * @return
     */
    @POST("/app/order/uploadFinishImg")
    Flowable<BaseDto<List<FinishImgDto>>> uploadFinishImg(@Body MultipartBody multipartBody);


    /**
     * 完成支付（表单提交）
     *
     * @param multipartBod
     * @return
     */
    @POST("/app/order/finishPay")
    Flowable<BaseDto<FinishPayDto>> finishPay(@Body MultipartBody multipartBod);


    /**
     * 获取服务列表
     *
     * @return
     */
    @POST("/app/queryAllOffice")
    Flowable<BaseDto<List<ProvinceBean>>> queryAllOffice();


    /**
     * 订单完成填写接口
     *
     * @param vo
     * @return
     */
    @POST("/app/order/finishOrder")
    Flowable<BaseDto> finishOrder(@Body FinishOrderVo vo);


    /**
     * 提交订单到支付
     *
     * @param vo
     * @return
     */
    @POST("/app/order/commitOrder")
    Flowable<BaseDto<Long>> commitOrder(@Body OrderVo vo);


    /**
     * 添加到购物车
     *
     * @param vo
     * @return
     */
    @POST("/app/product/addProductToShoppingCart")
    Flowable<BaseDto> addProductToShoppingCart(@Body ProductToShoppingCartVo vo);

    /**
     * 获取购物车列表
     *
     * @return
     */
    @POST("/app/product/getShoppingCartProducts")
    Flowable<BaseDto<List<ProductDetailDto>>> getShoppingCartProducts();

    /**
     * 购物车-修改对应的购物车
     * @param vo
     * @return
     */
    @POST("/app/product/updateShopCart")
    Flowable<BaseDto> updateShopCart(@Body  UpdateShopCartVo vo);

    /**
     * 购物车-添加到订单
     *
     * @param vo
     * @return
     */
    @POST("/app/product/addProductToOrder")
    Flowable<BaseDto> addProductToOrder(@Body AddProductToOrderVo vo);

    /**
     * 检查支付状态
     *
     * @param vo
     * @return
     */
    @POST("/app/order/checkPayStatus")
    Flowable<BaseDto<String>> checkPayStatus(@Body OrderVo vo);


    /**
     * 完成订单页面-初始化参数
     *
     * @return
     */
    @POST("/app/order/initParams")
    Flowable<BaseDto<ParamsListDto>> initParams();

    /**
     * 我的钱包
     *
     * @return
     */
    @POST("/app/usercenter/account")
    Flowable<BaseDto<AccountDto>> account();

    /**
     * 提现
     *
     * @return
     */
    @POST("/app/usercenter/withdraw")
    Flowable<BaseDto> withdraw(@Body WithdrawVo vo);

    /**
     * 报单-下拉參數
     * @return
     */
    @POST("/app/order/reportInitParam")
    Flowable<BaseDto<ParamsListDto>> reportInitParam();


    /**
     * 判断是否已经签到
     * @return
     */
    @POST("/app/order/checkSign")
    Flowable<BaseDto<String>> checkSign(@Body OrderVo vo);

}


